package com.uduew.sjd.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.SeekBar;

import com.uduew.sjd.R;

public class PercentageSeekBar extends androidx.appcompat.widget.AppCompatSeekBar {
    private Paint textPaint;
    private float textSpacing;  // 文本与Thumb的间距（单位：像素）
    private Rect textBounds = new Rect();

    public PercentageSeekBar(Context context) {
        super(context);
        init(context, null);
    }

    public PercentageSeekBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        // 初始化画笔
        textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setColor(Color.BLACK);
        textPaint.setTextSize(spToPx(context, 12));  // 默认12sp

        // 从属性获取自定义参数
        if (attrs != null) {
            TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PercentageSeekBar);
            textPaint.setColor(ta.getColor(R.styleable.PercentageSeekBar_textColor, Color.BLACK));
            textPaint.setTextSize(ta.getDimension(R.styleable.PercentageSeekBar_textSize, spToPx(context, 12)));
            textSpacing = ta.getDimension(R.styleable.PercentageSeekBar_textSpacing, dpToPx(context, 8));
            ta.recycle();
        }

        // 设置对齐方式为左侧基准线
        textPaint.setTextAlign(Paint.Align.LEFT);
    }

    @Override
    protected synchronized void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 关键计算步骤
        int progress = getProgress();
        String text = progress + "%";

        // 1. 获取实际可用宽度（考虑padding）
        int paddingLeft = getPaddingLeft();
        int paddingRight = getPaddingRight();
        float availableWidth = getWidth() - paddingLeft - paddingRight;

        // 2. 计算Thumb实际位置（包含padding）
        float thumbPos = paddingLeft + availableWidth * progress / getMax();

        // 3. 测量文本精确宽度
        float textWidth = textPaint.measureText(text);
        textPaint.getTextBounds(text, 0, text.length(), textBounds);

        // 4. 计算文本X坐标（thumb左侧 - 文本宽度 - 间距）
        float textX = thumbPos - textWidth - textSpacing;

        // 5. 边界保护（左边界不能小于paddingLeft）
        if (textX < paddingLeft) {
            textX = paddingLeft;
        }

        // 6. 垂直居中计算（基于基线对齐）
        float textY = getHeight() / 2f + textBounds.height() / 2f - textBounds.bottom;

        //text  0%不显示
        if (progress == 0) {
            text = "";
        }
        // 绘制文本
        canvas.drawText(text, textX, textY, textPaint);
    }

    // 工具方法：dp转px
    private float dpToPx(Context context, float dp) {
        return TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP,
                dp,
                context.getResources().getDisplayMetrics()
        );
    }

    // 工具方法：sp转px
    private float spToPx(Context context, float sp) {
        return TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_SP,
                sp,
                context.getResources().getDisplayMetrics()
        );
    }
}